package com.jj.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;

public class JwtUtils {
    //    签名秘钥
    private static String signKey = "itheima";
    //    过期时间为12个小时
    private static Long expire = 43200000L;

    //    生成令牌JWT
//    @param claims JWT第二部分负载payload中存储的内容
    public static String generateJwt(Map<String,Object> claims){
        String jwt = Jwts.builder()
//                将传入的自定义声明添加到JWT,claims为Map是一个键值对的集合，用于存储与用户或令牌的相关信息
                .addClaims(claims)
//                设置令牌有效期
                .setExpiration(new Date(System.currentTimeMillis() + expire))
//                配置JWt的签名算法和秘钥
                .signWith(SignatureAlgorithm.HS512, signKey)
//                完成jwt的构建，生成最终的JWT令牌字符串
                .compact();
        return jwt;
    }
    //    解析JWT令牌
//    @param jwt JWT令牌
//    @return JWT 第二部分负载payload中存储的内容
    public static Claims parseJWT(String jwt){
//        初始化jwt解析器，解析jwt的入口
        Claims claims = Jwts.parser()
//                设置签名的密钥
                .setSigningKey(signKey)
//                解析jwt令牌
                .parseClaimsJws(jwt)
//                获取负载payload
                .getBody();
        return claims;
    }
}
